//variables globales de generar_documento.js
var g_datos_requeridos=[]; //Array que indica los requisitos del pdf a crear [profesor, alumno,entidad,administrativo,datos especificos,asignatura,especialidad]
var g_datos_requeridos_cumplidos=[];//Arrat que indica de los requisitos anteriores, cuales se van cumpliendo
var g_num_datos_complementarios=0;//Variable que indica la cantidad de datos especificos que necesita el pdf

$(document).ready(function(){
	//Declarar ciertos eventos en la interfaz de la página generar_documento.html
	g_elemento = ['boton_add_user','boton_remove_user','boton_remove_one_user','select_pdf','select_asignatura','select_especialidad','boton_PDF'];
	g_evento =  ['click','click','click','change','change','change','click'];
	g_funcion = [pincharBoton,vaciarContenedor,eliminarSeleccionado,pincharSelectPDF,comprobarAsignatura,comprobarEspecialidad,crearPDF];
	cargarEventos(g_elemento,g_evento,g_funcion);
	//Dibujar el boton añadir Usuarios
	dibujarBotonAnadir();
	//Dibujar el boton borrar Usuarios
	dibujarBotonBorrar();
	//Dibujar el boton borrar Usuario Seleccionado
	dibujarBotonBorrarSeleccionado();
	//Dibujar el boton ver PDF
	dibujarBotonVerPDF();
	//Dibujar el boton enviar PDF
	dibujarBotonEnviarPDF();
	//Cargar Select PDF
	cargarSelectPDF();
	
});

//FUNCIONES AUXILIARES
function cargarSelectPDF(){
	/*
		Descripción: encargada de cargar datos en el objeto select_PDF (Nombre de los diferentes tipos de pdfs), llamando a CargarDatos().
		Ejemplo: "Gestión del Plan Docente de los Departamentos (PDD)" "Plantilla Global de Personal Docente"
		Entrada: Ninguna.
		Salida: Ninguna.
	*/

	cargarDatos(["select_pdf"],["select_pdf"]);
}

//Controlar la visualización de la interfaz
function pincharSelectPDF(){
	/*
		Descripción: encargada de moldear la interfaz de la página generar_documento.hmtl para poder mostrar los diferentes requerimietos que necesita 
					el pdf y mostrarlos correctamente segun el pdf elegido en el select_pdf.
		Ejemplo: Se muestra mensaje de aviso, se muestra la pestaña de indicar asignatura, se muestra la pestaña de añadir usuario... todo
					dependiendo del pdf seleccionado.
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	
	//Reacemos la interfaz y quitamos todos los requerimientos que pudieran haber anteirormente

	//Nota de aviso la ocultamos
	$("#aviso").css("display", "none");
	$("#aviso").text("");
	//Contenedor añadir usuarios la ocultamos
	$("#anadir_usuario").css("display", "none");
	$("#contenedor_interior").empty();
	//Contenedor datos conplementarios la ocultamos
	$("#anadir_datos_complementarios").css("display", "none");
	$("#div_datos_complementarios").empty();
	//Contenedor asignatura la ocultamos
	$("#anadir_asignatura").css("display", "none");
	$("#select_asignatura").empty();
	//Contenedor especialidad la ocultamos
	$("#anadir_especialidad").css("display", "none");
	$("#select_especialidad").empty();
	
	//Cargamos datos requeridos del PDF para saber que necesita el pdf seleccionado y lo guardamos en la variable g_datos_requeridos
	$.ajax({
		async:false,dataType:"html",type:"GET",url:"php/script_base_datos.php",data:"query=carga_requeridos_pdf&id="+$(this).val(),success:function(data){
			g_datos_requeridos = data.split("|");
		},error:function(objXMLHttpRequest){}
	});
	
	//Actualizamos datos requeridos cumplidos, esto significa poner a true lo que no necesita y false lo que necesita
	for(i=0;i<g_datos_requeridos.length-1;i++){
		if(g_datos_requeridos[i]==0){
			g_datos_requeridos_cumplidos[i]=true;
		}else{
			g_datos_requeridos_cumplidos[i]=false;
		}
	}
	
	//Interpretamos los datos requeridos (pro,alu,ent,adm,datos,asignatura,aviso)
	// 1º Miramos si tiene aviso para mostrarlo
	if(g_datos_requeridos[7]!=""){
		$("#aviso").css("display", "block");
		$("#aviso").text(g_datos_requeridos[7]);
	}

	// 2º El contenedor añadir usuario (profesor,alumno,entioad o administrativo) para mostrarlo
	if(g_datos_requeridos[0]==1 || g_datos_requeridos[1]==1 || g_datos_requeridos[2]==1 || g_datos_requeridos[3]==1){
		$("#anadir_usuario").css("display", "block");

	}
	// 3º El contenedor datos requeridos para mostralo
	if(g_datos_requeridos[4]==1){
		$("#anadir_datos_complementarios").css("display", "block");
		activarDatosRequeridos($(this).val(),$("option:selected", this).text());
		
	}
	// 4º Comprobar boton final por si todos los requerimientos ya estan cumplidos (caso de no requerir nada como por ejemplo el PDF "PDD")
	controlarBotonPDF();
}

function activarDatosRequeridos(id_pdf,indicador){
	/*
		Descripción: Encargada de mostrar los tipos de datos requeridos que necesita el pdf. Datos que no se obtiene del BDD sino a través del usuario.
					pero que si tipo de descripcion y el número de estos datos si estan almacenados en la BDD.
		Ejemplo: -activarDatosRequeridos($(this).val(),$("option:selected", this).text());
		Entrada: -activarDatosRequeridos(5,"Docente en un Seminario");.
		Salida: Ninguna.
	*/
	//cargamos datos requeridos necesarios llamando a la BDD en "script_base_datos.php"
	var datos_requeridos=[]; //Variable donde almacenamos la información (nombre del campo/tipo de campo)
	$.ajax({
		async:false,dataType:"html",type:"GET",url:"php/script_base_datos.php",data:"query=carga_datos_requeridos_pdf&id="+id_pdf,success:function(data){
			datos_requeridos = data.split("|");
		},error:function(objXMLHttpRequest){}
	});
	//Almacenamos el num de input requeridos (Dividimos entre dos porque por cada par se refiere a un campo)
	g_num_datos_complementarios=datos_requeridos.length/2;
	
	//Registramos la variable indicador en caso de ser el pdf "Defensa del Trabajo de Fin de Máster", necesario para mejorar la interfaz
	if(indicador=="Defensa del Trabajo de Fin de Máster"){
		indicador="(a la/al + lugar)"
	}else{
		indicador="";
	}
	
	//Mostrar datos en div datos requeridos (los pares etiquetas/los impares Inputs)
	for(i=0;i<datos_requeridos.length;i++){
		if (i%2==0){//Etiquetas
		    if(i==0){//No darle al primero tabulacion
		    	$("#div_datos_complementarios").append("<label class='izquierda'>"+datos_requeridos[i]+"</label>");
		    }else{//Darle tabulacion a los siguientes
		    	$("#div_datos_complementarios").append("<label class='izquierda tabulacion'>"+datos_requeridos[i]+"</label>");
		    }
		    
		}else{//Inputs
			//Por cada tio de input controlamos los datos de entrada
		    if(datos_requeridos[i]=="texto"){ //Si es texto creamos un objeto tipo texto y le agregamos la funcion comprobarDatosRequeridos();
		    	$("#div_datos_complementarios").append("<input type='text' name='"+datos_requeridos[i-1]+"' id='input_texto_"+i+"' class='izquierda' placeholder='"+indicador+"'>");
		    	$("#input_texto_"+i).on('keypress keyup',function() { //agregar evento al pulsar una tecla dentro del input
		    		comprobarDatosRequeridos();
		    	});
		    }
		    if(datos_requeridos[i]=="fecha"){ //Si es fecha creamos un objeto tipo fecha y le añadimos un datepicker(calendario) y le agregamos la funcion comprobarDatosRequeridos();
		    	$("#div_datos_complementarios").append("<input type='text' name='"+datos_requeridos[i-1]+"' id='input_fecha_"+i+"' class='izquierda' readonly>");
		    	//Añadir boton fecha (CALENDARIO)
		    	$("#input_fecha_"+i).datepicker({ //agregar evento al pulsar una tecla dentro del input
					showOn: "button",
					buttonImage: "images/calendar.gif",
					buttonImageOnly: true,
					buttonText: "Selecciona una fecha",
					onSelect: function(){
	    					comprobarDatosRequeridos();
					}
				});
				//Alinear a la izquierda el datepicker
				$("img[class='ui-datepicker-trigger']").addClass('izquierda centrar');
		    	
		    }
		    if(datos_requeridos[i]=="hora"){//Si es hora creamos un objeto tipo texto y le agregamos la funcion comprobarDatosRequeridos() junto con formato(objeto,"hora");
		    	$("#div_datos_complementarios").append("<input type='text' name='"+datos_requeridos[i-1]+"' id='input_hora_"+i+"' class='izquierda' placeholder='hh:mm (24h)' maxlength=5>");
		    	$("#input_hora_"+i).on('keypress keyup',function() { //agregar evento al pulsar una tecla dentro del input
		    		formato($(this),"hora");
		    		comprobarDatosRequeridos();
		    	});
		    }
		    if(datos_requeridos[i]=="numero"){ //Si es numero creamos un objeto tipo texto y le agregamos la funcion comprobarDatosRequeridos() junto con formato(objeto,"decimal");
		    	$("#div_datos_complementarios").append("<input type='text' name='"+datos_requeridos[i-1]+"' id='input_numero_"+i+"' class='izquierda' maxlength=5 >");
		    	$("#input_numero_"+i).on('keypress keyup',function() { //agregar evento al pulsar una tecla dentro del input
		    		formato($(this),"decimal"); 
		    		comprobarDatosRequeridos();
		    	});
		    }
		}
	}
}

function activarSelect(nombre){
	/*
		Descripción: encargada de mostrar pestaña de asignatura o especialidad segun el argumento de entrada
		Ejemplo: activarSelect(nombre);
		Entrada: -nombre: nombre referido al objeto a mostrar ("asignatura", "especialidad")
		Salida: Ninguna.
	*/
	var id_profesor;
	
	var select = new Array();
		select["asignatura"] = 5;
		select["especialidad"] = 6;
	
	//Si el PDF requiere de asignatura o especialidad, mostramos pestaña
	if((id_profesor=comprobarUsuario("Profesor"))!=0){ //miramos que solo haya el num de profesores indicados
		$("#anadir_"+nombre).css("display", "block"); //Mostramos pespaña
		if($("#select_pdf option:selected").text()=="Mienbro del tribunal evaluador del Trabajo Fin de Máster"){ //Si es este tipo de pdf
			cargarDatos(["select_"+nombre+"_pdf&id="+id_profesor+"&opcion=1"],["select_"+nombre]); //Cargamos en el select de la pestaña unos datos en concretos
		}
		if($("#select_pdf option:selected").text()=="Docente en un Seminario"){ //Si es este tipo de pdf
			cargarDatos(["select_"+nombre+"_pdf&opcion=2"],["select_"+nombre]); //Cargamos en el select de la pestaña unos datos en concretos
		}else{
			cargarDatos(["select_"+nombre+"_pdf&id="+id_profesor+"&opcion=0"],["select_"+nombre]); //Por defencto cargamos esta opcion
		}
	}else{ //Sino cumple el requisitos para mostrar la pestaña asignatura o especialidad
		$("#anadir_"+nombre).css("display", "none"); //ocultamos la pestaña
		g_datos_requeridos_cumplidos[select[nombre]]=false; //el requerimiento no se cumple
	}	
}

//Comprobar el cumplimiento de los requisitos

function comprobarUsuario(nombre){
	/*
		Descripción: encargada de contar el número de profesores o alumnos que hay en la pestaña "contenedor_interior"
		Ejemplo: comprobarUsuario(nombre);
		Entrada: -nombre: Referido a contar "profesor" o "alumno"
		Salida: Devuelve "0" si no hay ninguno o más de 1, o el "id" del profesor o alumno si solo hay uno.
	*/
	
	var contador=0;
	var id_profesor=0;
	var tipo = new Array();
		tipo["Profesor"] = 0;
		tipo["Alumno"] = 1;

	//Miramos que solo haya un usuario en el contenedor
	$("#contenedor_interior div div").each(function (index) {
			if($(this).text()==nombre){
				contador++;
				//localizamos el id del profesor
				id_profesor=$(this).parent().attr("id").split("_")[2];
			}
	});

	//Una vez terminado el recuento
	if(contador==1){ //miramos que solo haya el num de profesores indicados
		//Actualizamos los requerimientos cumplidos
		g_datos_requeridos_cumplidos[tipo[nombre]]=true;
		//Y devolvemos el idº 
		return id_profesor;
	}else{
		//Actualizamos los requerimientos cumplidos
		g_datos_requeridos_cumplidos[tipo[nombre]]=false;
		return 0;
	}
}

function comprobarAsignatura(){
	/*
		Descripción: encargada de mirar si el requerimiento de Asignatura se ha cumplido
		Ejemplo: g_datos_requeridos_cumplidos[5]=true;
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	g_datos_requeridos_cumplidos[5]=true;
	controlarDocumentoPDF();
}

function comprobarEspecialidad(){
	/*
		Descripción: encargada de mirar si el requerimiento de Especialidad se ha cumplido
		Ejemplo: g_datos_requeridos_cumplidos[6]=true;
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	g_datos_requeridos_cumplidos[6]=true;
	controlarDocumentoPDF();
}

function controlarBotonPDF(){
	/*
		Descripción: encargada de comprobar si todos los requerimientos almacenados en "g_datos_requeridos_cumplidos" estas cumplidos
		Ejemplo: g_datos_requeridos_cumplidos[i]==true
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	var bandera=true;
	//Mirar si hay algo dato que falte
	for(i=0;i<g_datos_requeridos_cumplidos.length;i++){
		if(g_datos_requeridos_cumplidos[i]==false){
			bandera=false;
		}
	}
	//En cada caso, habilitar o deshabilitar el boton
	$("#boton_PDF").button({
		disabled: !bandera
	});
	//Poner el aviso en verde
	if(bandera==true){
		$("#aviso").css("color", "green");
		$("#aviso").css("border-color", "green");
	}else{
		$("#aviso").css("color", "red");
		$("#aviso").css("border-color", "red");
	}
	
}

function controlarDocumentoPDF(){
	/*
		Descripción: encargada de comprobar si necesita como requerimientos un profesor o un alumno y llamar a la funcion comprobarUsuario(nombre);
		Ejemplo: comprobarUsuario("Profesor");
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	for(i=0;i<g_datos_requeridos.length;i++){
		if(i==0 && g_datos_requeridos[i]==1){
			comprobarUsuario("Profesor");
			
		}
		if(i==1 && g_datos_requeridos[i]==1){
			comprobarUsuario("Alumno");
		}
	}
	//Terminar llamando a la funcion controlarBotonPDF();
	controlarBotonPDF();
}

function comprobarDatosRequeridos(){
	/*
		Descripción: encargada de comprobar que los imputs "datos_requeridos" cumplen cada una los requisitos a la hora de introducir los datos
		Ejemplo: -
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	var contador=0;
	var tipo='';

	//Comprobamos que cada input por su tipo cumple con sus requisitos
	$("#div_datos_complementarios input").each(function (index){
		tipo=$(this).attr("id").split("_")[1];
		if(tipo=="hora"){ //Si es hora debe de tener 5 caracteres
			if($(this).val().length==5){
				contador++;
			}
		}else{ //El resto no ser blanco
			if($(this).val()!=""){
				contador++;
			}
		}
	});
	//Comprobamos que el contador es igual al numero de datos requeridos
	if(contador==g_num_datos_complementarios){
		g_datos_requeridos_cumplidos[4]=true;
	}else{
		g_datos_requeridos_cumplidos[4]=false;
	}
	controlarDocumentoPDF();
}

//Acciones de Añadir Usuarios al contenedor
function pincharBoton(){
	/*
		Descripción: encargada de abrir la ventana buscar usuario
		Ejemplo: buscarUsuario("all",0,"dibujarSeleccionados('contenedor_interior',");
		Entrada: Ninguna.
		Salida: Ninguna.
	*/
	buscarUsuario("all",0,"dibujarSeleccionados('contenedor_interior',");
}

function dibujarSeleccionados(contenedor,id_user){
	/*
		Descripción: encargada de dibujar los usuarios seleccionados (profesor,alumno etc...)
		Ejemplo: -
		Entrada:-contenedor: nombre del objeto donde dibujar a los usuarios
				-id_user: id enla BDD del usuario a dibujar
		Salida: devolvemos true para devolver la accion a la funcion "buscarUsuario" desde la que se llama a esta.
	*/
	
	//Añadir Usuario_PDF (dibujar a los usuarios seleccionados en el contenedor)
	var id_div; //contiene el id del usuario que se le pasara al div correspondiente
	var bandera; //Controla que no se repita el usuario en elcontenedor
	var num_seleccionado=0; //Controla que solo haya un usuario seleccionado
	
	for(i=0;i<id_user.length;i++){//Por cada usuario seleccionado
		bandera=false;
		//Verificar que no este ya agregado
	     $("#"+contenedor+" div").each(function (index) {
	 		id_div=$(this).attr("id").split("_")[2]; //id del div que se esta recorriendo
	 		if(id_div==id_user[i]){ //Si ya esta agregado, bandera true
	 			bandera=true;
	 			alert("Usuario ya introducido");
	 		}  
	     });
	     
		if(bandera==false){ //Si no esta agregado, bandera false
			//Cargar Datos
			$.ajax({
				async:false,dataType:"html",type:"GET",url:"php/script_base_datos.php",data:"query=carga_usuario_pdf&id="+id_user[i],success:function(data){
					datos_usuario = data.split("|");
				},error:function(objXMLHttpRequest){}
			});
			//Dibujar div usuario en contenedor (Añadir id de usuario al div)	
			$("#"+contenedor).append("<div id='contenedor_user_"+id_user[i]+"' class='div_user_pdf'><div id='contenedor_user_tipo' class='div_user_tipo izquierda mayuscula'>"+datos_usuario[0]+"</div> <span class='negrita tabulacion'>Nombre: </span>"+datos_usuario[1]+" <span class='negrita tabulacion'>DNI: </span>"+datos_usuario[2]+"</div>");
			
			//Hacer seleccionable  y desseleccionable el div_user
			$("#"+contenedor).selectable({
				filter: "div",
				selected: function( event, ui ) { 
				},
				unselected: function ( event, ui ) {
				}
			});
		}
	}
	
	//Controlamos la pestaña asignatura
	if(g_datos_requeridos[5]==1){
		activarSelect("asignatura");
	}
	//Controlamos la pestaña especialidad
	if(g_datos_requeridos[6]==1){
		activarSelect("especialidad");
	}
	controlarDocumentoPDF();
	//Devolvemos true para terminar
	return true;
	
}
//Acciones de los botones borrado del contenedor de añadir Usuarios
function vaciarContenedor(){
	/*
		Descripción: encargada de borrar todos los usuarios seleccionados en el "contenedor_interior" y verificar otras pestañas relaccionadas.
		Ejemplo: $("#contenedor_interior").empty();
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#contenedor_interior").empty();
	//Controlamos PDF
	controlarDocumentoPDF();
	//Controlamos la pestaña asignatura
	if(g_datos_requeridos[5]==1 && g_datos_requeridos_cumplidos[0]==false){
		activarSelect("asignatura");
	}
	//Controlamos la pestaña especialidad
	if(g_datos_requeridos[6]==1 && g_datos_requeridos_cumplidos[0]==false){
		activarSelect("especialidad");
	}

}

function eliminarSeleccionado(){
	/*
		Descripción: encargada de borrar al usuarios seleccionado en el "contenedor_interior" y verificar otras pestañas relaccionadas.
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#contenedor_interior div").each(function (index) {
		if($(this).hasClass("ui-selected")){
			$(this).remove();
		}
	});
	//Controlamos PDF
	controlarDocumentoPDF();
	//Controlamos la pestaña asignatura
	if(g_datos_requeridos[5]==1){
		activarSelect("asignatura");
	}
	//Controlamos la pestaña especialidad
	if(g_datos_requeridos[6]==1){
		activarSelect("especialidad");
	}
}

//Accion botones crear PDF

function crearPDF(){
	/*
		Descripción: encargada de recoger todos los datos en la variable "valores" necesarios para poder generar el PDF seleccionado llamando a pdf.php
					al hacer click en el botón "generar PDF"
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	//Variable
	var valores;
	
	//Buscamos el PDF Seleccionado (nombre)
	valores = "titulo="+$("#select_pdf option:selected").text();
	
	//Recorremos los requerimientos
	if(g_datos_requeridos[0]==1){ //Es que necesita de un profesor (buscamos su id)
		$("#contenedor_interior div div").each(function (index) {
				if($(this).text()=="Profesor"){
					valores +="&id_profesor="+$(this).parent().attr("id").split("_")[2];
				}
		});
	}
	if(g_datos_requeridos[1]==1){ //Es que necesita de un alumno (buscamos su id)
		$("#contenedor_interior div div").each(function (index) {
				if($(this).text()=="Alumno"){
					valores +="&id_alumno="+$(this).parent().attr("id").split("_")[2];
				}
		});
	}
	if(g_datos_requeridos[4]==1){ //Es que necesita datos complementarios
		$("#div_datos_complementarios input").each(function (index) {
			//Clasificar los inputs por tipos
			valores +="&dato_requerido_"+$(this).attr("id").split("_")[1]+"="+$(this).val();
		});
		
	}
	if(g_datos_requeridos[5]==1){ //Es que necesita asignatura
		valores +="&asignatura="+$("#select_asignatura").val();
	}
	if(g_datos_requeridos[6]==1){ //Es que necesita especialidad
		valores +="&especialidad="+$("#select_especialidad").val();
	}
	
	//Cargar Datos
	$.ajax({
		data:valores,
		async:false,
		dataType:"html",
		type:"GET",
		url:"php/pdf.php"
		}).done(function(){
    		window.open('documents/documento.pdf','documento.pdf','');
	});
}

//Dibujar botones de añadir  y borrar usuario del contenedor
function dibujarBotonAnadir(){
	/*
		Descripción: encargada de dar forma al botón "boton_add_user"
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#boton_add_user").button({
		text: false,
	    icons: {
	    	primary: "ui-icon-plusthick"
	    }
	});
}

function dibujarBotonBorrar(){
	/*
		Descripción: encargada de dar forma al botón "boton_remove_user"
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#boton_remove_user").button({
		text: false,
	    icons: {
	    	primary: "ui-icon-refresh"
	    }
	});
}

function dibujarBotonBorrarSeleccionado(){
	/*
		Descripción: encargada de dar forma al botón "boton_remove_one_user"
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#boton_remove_one_user").button({
		text: false,
	    icons: {
	    	primary: "ui-icon-trash"
	    }
	});
}

//Dibujar botones documento PDF
function dibujarBotonVerPDF(){
	/*
		Descripción: encargada de dar forma al botón "boton_PDF"
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#boton_PDF").button({
		icons: {
	    	primary: "ui-icon-document"
	   },
	   disabled: true
	});
}

function dibujarBotonEnviarPDF(){
	/*
		Descripción: encargada de dar forma al botón "enviar_PDF"
		Ejemplo: -
		Entrada: Ninguna.
		Salida: NInguna.
	*/
	$("#enviar_PDF").button({ 
		icons: {
	    	primary: "ui-icon-mail-closed"
	   },
	   disabled: true
	});
}
